www.gusucode.com > 网狐 内核引擎源代码-源码程序 > 网狐 内核引擎源代码-源码程序/code/6.6内核引擎/ServiceEngine.cpp
//Download by http://www.NewXing.com #include "StdAfx.h" #include "EventService.h" #include "ServiceEngine.h" ////////////////////////////////////////////////////////////////////////// //构造函数 CServiceEngine::CServiceEngine() { m_bService=false; return; } //析构函数 CServiceEngine::~CServiceEngine() { //停止服务 StopService(); return; } //接口查询 void * __cdecl CServiceEngine::QueryInterface(const IID & Guid, DWORD dwQueryVer) { QUERYINTERFACE(IServiceEngine,Guid,dwQueryVer); QUERYINTERFACE_IUNKNOWNEX(IServiceEngine,Guid,dwQueryVer); return NULL; } //获取定时器接口 void * __cdecl CServiceEngine::GetTimerEngine(const IID & Guid, DWORD dwQueryVer) { return m_TimerEngine.QueryInterface(Guid,dwQueryVer); } //获取调度引擎接口 void * __cdecl CServiceEngine::GetAttemperEngine(const IID & Guid, DWORD dwQueryVer) { return m_AttemperEngine.QueryInterface(Guid,dwQueryVer); } //获取网络引擎接口 void * __cdecl CServiceEngine::GetTCPSocketEngine(const IID & Guid, DWORD dwQueryVer) { return m_TCPSocketEngine.QueryInterface(Guid,dwQueryVer); } //获取数据库引擎接口 void * __cdecl CServiceEngine::GetDataBaseEngine(const IID & Guid, DWORD dwQueryVer) { return m_DataBaseEngine.QueryInterface(Guid,dwQueryVer); } //获取异步引擎接口 void * __cdecl CServiceEngine::GetAsynchronismEngine(const IID & Guid, DWORD dwQueryVer) { return m_AsynchronismEngine.QueryInterface(Guid,dwQueryVer); } //获取数据库队列接口 void * __cdecl CServiceEngine::GetDataBaseQueueService(const IID & Guid, DWORD dwQueryVer) { return m_DataBaseEngine.GetQueueService(Guid,dwQueryVer); } //获取调度队列接口 void * __cdecl CServiceEngine::GetAttemperQueueService(const IID & Guid, DWORD dwQueryVer) { return m_AttemperEngine.GetQueueService(Guid,dwQueryVer); } //外部控制 bool __cdecl CServiceEngine::ControlService(void * pBuffer, WORD wDataSize) { //效验状态 if (m_bService==false) { CEventTrace::ShowEventNotify(TEXT("服务引擎处于停止状态中,控制操作忽略"),Level_Exception); return false; } //插入数据 IQueueService * pIQueueService=(IQueueService *)m_AttemperEngine.GetQueueService(IID_IQueueService,VER_IQueueService); if (pIQueueService==NULL) { CEventTrace::ShowEventNotify(TEXT("获取调度引擎触发接口失败"),Level_Exception); return false; } //投递指令 if (pIQueueService->AddToQueue(EVENT_CONTROL,pBuffer,wDataSize)==false) { CEventTrace::ShowEventNotify(TEXT("投递控制消息指令失败"),Level_Exception); return false; } return true; } //启动服务 bool __cdecl CServiceEngine::StartService() { //判断状态 if (m_bService==true) { CEventTrace::ShowEventNotify(TEXT("服务引擎重复启动,启动操作忽略"),Level_Warning); return true; } //接口查询 IUnknownEx * pISocketEngine=QUERY_OBJECT_INTERFACE(m_TCPSocketEngine,IUnknownEx); IUnknownEx * pIAttemperEngine=(IUnknownEx *)m_AttemperEngine.GetQueueService(IID_IUnknownEx,VER_IUnknownEx); //绑定组件 if (m_AttemperEngine.SetSocketEngine(pISocketEngine)==false) { CEventTrace::ShowEventNotify(TEXT("网络引擎与调度引擎绑定失败"),Level_Exception); return false; } if (m_TimerEngine.SetTimerEngineSink(pIAttemperEngine)==false) { CEventTrace::ShowEventNotify(TEXT("定时器引擎与调度引擎绑定失败"),Level_Exception); return false; } if (m_TCPSocketEngine.SetSocketEngineSink(pIAttemperEngine)==false) { CEventTrace::ShowEventNotify(TEXT("网络引擎与调度引擎绑定失败"),Level_Exception); return false; } //启动引擎服务 if (m_TimerEngine.StartService()==false) return false; if (m_DataBaseEngine.StartService()==false) return false; if (m_AsynchronismEngine.StartService()==false) return false; if (m_AttemperEngine.StartService()==false) return false; if (m_TCPSocketEngine.StartService()==false) return false; //设置变量 m_bService=true; return true; } //停止服务 bool __cdecl CServiceEngine::StopService() { //设置变量 m_bService=false; //删除定时器 m_TimerEngine.KillAllTimer(); //停止服务引擎 m_AttemperEngine.StopService(); m_DataBaseEngine.StopService(); m_TimerEngine.StopService(); m_TCPSocketEngine.StopService(); m_AsynchronismEngine.StopService(); return true; } //设置事件 bool __cdecl CServiceEngine::SetEventService(IUnknownEx * pIUnknownEx) { return CEventTrace::SetEventService(pIUnknownEx); } //注册钩子 bool __cdecl CServiceEngine::SetAttemperEngineSink(IUnknownEx * pIUnknownEx) { return m_AttemperEngine.SetAttemperEngineSink(pIUnknownEx); } //注册钩子 bool __cdecl CServiceEngine::SetDataBaseSink(IUnknownEx * pIUnknownEx) { return m_DataBaseEngine.SetDataBaseSink(pIUnknownEx); } //注册钩子 bool __cdecl CServiceEngine::RegisterAsynchronismEngineSink(IUnknownEx * pIUnknownEx) { return m_AsynchronismEngine.RegisterAsynchronismEngineSink(pIUnknownEx); } //设置网络 bool __cdecl CServiceEngine::InitServiceEngine(WORD wListenPort, WORD wMaxSocketItem) { if (m_TCPSocketEngine.SetServicePort(wListenPort)==false) return false; if (m_TCPSocketEngine.SetMaxSocketItem(wMaxSocketItem)==false) return false; return true; } ////////////////////////////////////////////////////////////////////////// //建立对象函数 extern "C" __declspec(dllexport) void * __cdecl CreateServiceEngine(const GUID & Guid, DWORD dwInterfaceVer) { //建立对象 CServiceEngine * pServiceEngine=NULL; try { pServiceEngine=new CServiceEngine(); if (pServiceEngine==NULL) throw TEXT("创建失败"); void * pObject=pServiceEngine->QueryInterface(Guid,dwInterfaceVer); if (pObject==NULL) throw TEXT("接口查询失败"); return pObject; } catch (...) {} //清理对象 SafeDelete(pServiceEngine); return NULL; } //////////////////////////////////////////////////////////////////////////